<?php
/**
 * @authors liuqinglin 
 * @email (2961181429@qq.com) 
 * @https://my.oschina.net/shp32131
 * @date    2016-12-01 10:59:58
 */
class Controller {
	//数据模型操作类
	private $model;
	//表单视图类
	private $view;
	//消息列表
	private $message_list;
	//系统安装配置数组
	private $config;

	//==========================================
	// 初使化对象的成员属性
	//==========================================
	function __construct($config)
	{
		$this->config=$config;

		$this->model=new Model($this->config['db_config_file'],$this->config['sqlFile']);

		$this->view=new View();

		$this->message_list="";
	}

	//==========================================
	// 函数: exeStep($step)
	// 功能: 设置安装的执行步骤
	// 参数: $step是当前安装步骤的数字
	//==========================================
	function exeStep($step)
	{
		switch($step)
		{
			case 1:
				echo $this->view->echo_agreement();
				break;
			case 2:
				echo $this->view->echo_check_results($this->config);
				break;
			case 3:
				$this->message_list='请正确填写数据库的配置信息';
				echo $this->view->set_db_form($this->message_list);
				break;
			case 4:
				if(!$this->validate_db_form($_POST))
				{
					echo $this->view->set_db_form($this->message_list);
				}
				else
				{
					if($this->model->update_config_file($_POST))
					{
						$this->message_list='请在下面的表单中正确填写管理员信息';
						echo $this->view->set_admin_form($this->message_list);
					}
					else
					{
						echo "写入配置文件失败!!";
					}	
				}	
				break;
			case 5:
				if(!$this->validate_admin_form($_POST))
				{
					echo $this->view->set_admin_form($this->message_list);
				}
				else
				{
					if(@$this->model->create_database($_POST,$this->config['db']))
					{
						$install_state=true;
					}
					else
					{
						$install_state=false;
					}
					echo $this->view->echo_install_messages($this->model->get_install_info(), $install_state);
				}
				break;
			case 6:
				if(file_put_contents ("./install.lock", "系统安装 OK ^_^..."))
				{
					echo '<script>window.location="../index.php/admin/admin"</script>';
				}
				break;
		}	
		
	}

	//删除目录和文件
	private function delDir($directory)
	{
		if(file_exists($directory))
		{
			if($dir_handle=@opendir($directory))
			{      
				while($filename=readdir($dir_handle))
				{  
					if($filename!="." && $filename!="..")
					{   
						$subFile=$directory."/".$filename;   
						if(is_dir($subFile))                
							$this->delDir($subFile);             
						if(is_file($subFile))               
							unlink($subFile);             
					}
				}
				closedir($dir_handle);  
			}
		}
	}

	//==========================================
	// 函数: validateDbFrom($post)
	// 功能: 对输入数据库配置信息的表单进行验证
	// 参数: $post是表单中用户输入的数据库信息的数据数组
	// 返回: true或false
	//==========================================
	private function validate_db_form($post)
	{
		$result=true;
		if(trim(($post['hostname'])==""))
		{
			$this->message_list.="数据库主机名不能为空!!<br>";
			$result=false;
		}
		if(trim(($post['username'])==""))
		{
			$this->message_list.="数据库用户名不能为空!!<br>";
			$result=false;
		}

		if(trim(($post['database'])==""))
		{
			$this->message_list.="数据库名称不能为空!!<br>";
			$result=false;
		}
		if(trim(($post['dbprefix'])==""))
		{
			$this->message_list.="表名的前缀不能为空!!<br>";
			$result=false;
		}
		if(!$result)
		{
			return false;
		}
		if(!@mysql_connect($post['hostname'],$post['username'],$post['password']))
		{
			$this->message_list.="数据库连接失败,请检查用户名密码!!<br>";	
			return false;
		}
		if(!@mysql_select_db($post['database']))
		{
			$this->message_list.="数据库<b>".$post['database']."</b>不存在，请先创建".$post['database']."数据库!<br>";	
			return false;
		}
		return $result;
	}


	//==========================================
	// 函数: validateAdminFrom($post)
	// 功能: 对输入管理员配置信息的表单进行验证
	// 参数: $post是表单中用户输入的管理员信息的数据数组
	// 返回: true或false
	//==========================================
	private function validate_admin_form($post)
	{
		$result=true;
		if(trim(($post['name'])==""))
		{
			$this->message_list.="管理员帐号不能为空!!<br>";
			$result=false;
		}
		if(trim(($post['password'])==""))
		{
			$this->message_list.="管理员密码不能为空!!<br>";
			$result=false;
		}
		if(trim(($post['repassword'])==""))
		{
			$this->message_list.="重复输入的密码不能为空!!<br>";
			$result=false;
		}		
		if(trim(($post['phone'])==""))
		{
			$this->message_list.="电话不能为空!!<br>";
			$result=false;
		}
		if(trim($post['password'])!=trim($post['repassword']))
		{
			$this->message_list.="两次密码输入不一致!!<br>";
			$result=false;
		}
		if(trim(($post['email'])==""))
		{
			$this->message_list.="管理员邮箱不能为空!!<br>";
			$result=false;
		}
		elseif(!preg_match("/\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*/", $post['email']))
		{
			$this->message_list.="不合法的电子邮箱格式!!<br>";
			$result=false;
		}
		return $result;
	}

}
